/**
 * @projectName: dataAccessFactory
 * @author: 小飞
 * @description: TODO
 * @date: 2024/2/27 23:17
 * @version: 1.0
 */
package com.home.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
@Slf4j
public class RedisUtil {
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     *将对应信息存入到redis中(只有key,value,无过期时间的方法)
     * @param key redis的key
     * @param value 要存储进去的value
     * @param <T> 指代的是这个方法为一个泛型方法，可以在这个方法里面使用T
     */
    public <T> void setRedisObject(final String key,final T value){
        redisTemplate.opsForValue().set(key,value);
    }

    /**
     * 将对应信息存入到redis中(只有key,value,有过期时间的方法)
     * @param key redis的键
     * @param value 对应的值
     * @param timeout 过期时间
     * @param timeUnit 时间单位
     * @param <T> 指代该方法是一个泛型方法
     */
    public <T> void setRedisObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit){
        redisTemplate.opsForValue().set(key,value,timeout,timeUnit);
    }
    /**
     *通过键获取对应的值
     * @param key redis里面的键
     * @return value
     * @param <T> 指代该方法是一个泛型方法
     */
    public<T> T getRedisObject(String key){
        ValueOperations<String,T> operations = redisTemplate.opsForValue();
        return operations.get(key);
    }

}
